﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using System.IO;
using MVCScaffold.GerenciadoresContexto;
using MVCScaffold.Tests.Suporte;

namespace MVCScaffold.Tests
{
    [TestFixture]
    public class GerenciadorEdmxTest
    {

        public GerenciadorEdmxTest()
        {
            PrepararArquivosProjeto.Preparar();

        }


        [Test]
        [ExpectedException(typeof(FileNotFoundException))]
        public void Quando_Arquivo_Nao_For_Encontrado()
        {

        }


        [Test]
        [ExpectedException(typeof(ArgumentNullException))]
        public void Quando_Argumento_Contrutor_For_Nulo()
        {

        }

        [Test]
        public void Quando_Arquivo_Carregado_Com_Sucesso()
        {
            GerenciadorContexto gerenciadorContexto =
                new GerenciadorEdmx(Path.Combine(Properties.Resources.DiretorioOut, "arquivo_edmx_com_mapeamento.edmx"));

            Assert.IsNotNull(gerenciadorContexto);
            Assert.IsNotNull(gerenciadorContexto.Entidades);
            Assert.IsNotNull(gerenciadorContexto.Namespace);
            Assert.IsNotNull(gerenciadorContexto.NomeContext);

            foreach (var entidade in gerenciadorContexto.Entidades)
                Assert.IsNotNull(entidade.Properties);

            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Categories").Properties.Count, 4);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "CustomerDemographics").Properties.Count, 2);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Customers").Properties.Count, 11);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Employees").Properties.Count, 17);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Details").Properties.Count, 5);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Orders").Properties.Count, 11);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Order_Details").Properties.Count, 5);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Products").Properties.Count, 8);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Region").Properties.Count, 2);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Shippers").Properties.Count, 3);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Suppliers").Properties.Count, 12);
            Assert.AreEqual(gerenciadorContexto.Entidades.FirstOrDefault(x => x.Name == "Territories").Properties.Count, 3);

        }
    }
}
 